home *** CD-ROM | disk | FTP | other *** search
/ Sun Solutions 1997 April to September / Sun Solutions CD - APR '97 - SEP '97 (704-3778-12 Rev. H)(Sun Microsystems, Inc.)(1997).iso / products / Hyperion / src / README.bsd386 < prev    next >
Text File  |  1997-02-26  |  8KB  |  305 lines

  1. - @(#)README.bsd386    1.1 1/30/94 -
  2.  
  3. To compile and run WorkMan on BSD/386, you will need two things not
  4. provided in the BSD/386 release:
  5.  
  6.     1) XView libraries and include files (3.0 or later). (available on
  7.     bsdi.com for anonymous FTP)
  8.  
  9.     2) the attached diffs for the CDROM library (to provide a volume
  10.     function with better resolution).
  11.  
  12. If you have a SoundBlaster Pro with a driver installed (also available
  13. from bsdi.com, the SBlast-1.5 version, not Steve McCanne's version), you
  14. can compile SoundBlaster volume control code, which is useful for
  15. non-SCSI CDROM devices.  To do so, edit the Imakefile to remove the
  16. comments around LOCALDEFS.  Once you have compiled, you can enable the
  17. SoundBlaster volume control by patching the sb_fd variable to -1, like
  18. so:
  19.  
  20. % /usr/bin/gdb -w workman
  21. (gdb) set sb_fd = -1
  22. (gdb) quit
  23. %
  24.  
  25. Use imake to generate a BSD/386 Makefile, with something like:
  26.  
  27. imake -DUseInstalled -I/usr/src/local/XView3.0/config -I/usr/X11/lib/X11/config
  28.  
  29. For SCSI CD-ROM drives, WorkMan must be run as root (perhaps as setuid,
  30. but that may have security implications on database file reading) in
  31. order to have access to issue SCSI audio commands.
  32.  
  33. ==John Kohl
  34. jtk@kolvir.blrc.ma.us
  35. ---------------
  36. And here's a patch file:
  37.  
  38. diff -c -r /cdrom/usr/src/lib/libcdrom/common.c ./common.c
  39. *** /cdrom/usr/src/lib/libcdrom/common.c    Mon Mar  8 01:13:11 1993
  40. --- ./common.c    Fri Jun 25 02:23:30 1993
  41. ***************
  42. *** 28,33 ****
  43. --- 28,34 ----
  44.       scsi2_status,
  45.       scsi2_eject,
  46.       scsi2_volume,
  47. +     scsi2_volume2,
  48.   },
  49.   {
  50.       "panasonic",
  51. ***************
  52. *** 38,43 ****
  53. --- 39,45 ----
  54.       panasonic_status,
  55.       panasonic_eject,
  56.       panasonic_volume,
  57. +     panasonic_volume2,
  58.   },
  59.   {
  60.       "toshiba",
  61. ***************
  62. *** 48,53 ****
  63. --- 50,56 ----
  64.       toshiba_status,
  65.       toshiba_eject,
  66.       toshiba_volume,
  67. +     toshiba_volume2,
  68.   },
  69.   { 
  70.       "mitsumi",
  71. ***************
  72. *** 58,63 ****
  73. --- 61,67 ----
  74.       mitsumi_status,
  75.       mitsumi_eject,
  76.       mitsumi_volume,
  77. +     mitsumi_volume2,
  78.   },
  79.   { NULL },
  80.   };
  81. ***************
  82. *** 198,201 ****
  83. --- 202,216 ----
  84.   int volume;
  85.   {
  86.       return((*cdinfo->funcs->volume)(cdinfo, volume));
  87. + }
  88. + /*
  89. +  * Set the stereo volume level 0 = min, 255 = max
  90. +  */
  91. + int
  92. + cdvolume2(cdinfo, left, right)
  93. + struct cdinfo *cdinfo;
  94. + int left, right;
  95. + {
  96. +     return((*cdinfo->funcs->volume2)(cdinfo, left, right));
  97.   }
  98. diff -c -r /cdrom/usr/src/lib/libcdrom/devs.h ./devs.h
  99. *** /cdrom/usr/src/lib/libcdrom/devs.h    Mon Mar  8 11:42:08 1993
  100. --- ./devs.h    Fri Jun 25 02:21:35 1993
  101. ***************
  102. *** 21,26 ****
  103. --- 21,27 ----
  104.       int    __P((*status)(struct cdinfo *, struct cdstatus *));
  105.       int    __P((*eject)(struct cdinfo *));
  106.       int    __P((*volume)(struct cdinfo *, int));
  107. +     int    __P((*volume2)(struct cdinfo *, int, int));
  108.   };
  109.   
  110.   struct    cdinfo *scsi2_probe __P((int, char *, char *, char *, int));
  111. ***************
  112. *** 30,35 ****
  113. --- 31,37 ----
  114.   int    scsi2_status __P((struct cdinfo *, struct cdstatus *));
  115.   int    scsi2_eject __P((struct cdinfo *));
  116.   int    scsi2_volume __P((struct cdinfo *, int));
  117. + int    scsi2_volume2 __P((struct cdinfo *, int, int));
  118.   
  119.   struct cdinfo *panasonic_probe __P((int, char *, char *, char *, int));
  120.   int    panasonic_close __P((struct cdinfo *));
  121. ***************
  122. *** 38,43 ****
  123. --- 40,46 ----
  124.   int    panasonic_status __P((struct cdinfo *, struct cdstatus *));
  125.   int    panasonic_eject __P((struct cdinfo *));
  126.   int    panasonic_volume __P((struct cdinfo *, int));
  127. + int    panasonic_volume2 __P((struct cdinfo *, int, int));
  128.   
  129.   struct cdinfo *toshiba_probe __P((int, char *, char *, char *, int));
  130.   int    toshiba_close __P((struct cdinfo *));
  131. ***************
  132. *** 46,51 ****
  133. --- 49,55 ----
  134.   int    toshiba_status __P((struct cdinfo *, struct cdstatus *));
  135.   int    toshiba_eject __P((struct cdinfo *));
  136.   int    toshiba_volume __P((struct cdinfo *, int));
  137. + int    toshiba_volume2 __P((struct cdinfo *, int, int));
  138.   
  139.   struct cdinfo *mitsumi_probe __P((int, char *, char *, char *, int));
  140.   int    mitsumi_close __P((struct cdinfo *));
  141. ***************
  142. *** 54,59 ****
  143. --- 58,64 ----
  144.   int    mitsumi_status __P((struct cdinfo *, struct cdstatus *));
  145.   int    mitsumi_eject __P((struct cdinfo *));
  146.   int    mitsumi_volume __P((struct cdinfo *, int));
  147. + int    mitsumi_volume2 __P((struct cdinfo *, int, int));
  148.   
  149.   struct cdinfo *make_cdinfo __P((int, int));
  150.   int    scsi_inquiry __P((int, char *, char *, char *, int *));
  151. diff -c -r /cdrom/usr/src/lib/libcdrom/mitsumi.c ./mitsumi.c
  152. *** /cdrom/usr/src/lib/libcdrom/mitsumi.c    Mon Mar  8 01:14:05 1993
  153. --- ./mitsumi.c    Fri Jun 25 02:24:40 1993
  154. ***************
  155. *** 238,247 ****
  156.       if (val > 255)
  157.           val = 255;
  158.   
  159.       bzero(args, sizeof args);
  160.       args[0] = 0xae;
  161. !     args[1] = val;
  162. !     args[3] = val;
  163.       mitsumi_cmd(cdinfo->fd, args, 5, (char *)buf, 5);
  164.       if (buf[0] & 1)
  165.           fprintf(stderr, "error setting volume: %x\n", buf[0] & 0xff);
  166. --- 238,258 ----
  167.       if (val > 255)
  168.           val = 255;
  169.   
  170. +     return mitsumi_volume2(cdinfo, val, val);
  171. + }
  172. + int
  173. + mitsumi_volume2(cdinfo, left, right)
  174. +     struct cdinfo *cdinfo;
  175. +     int left, right;
  176. + {
  177. +     char args[20];
  178. +     char buf[20];
  179.       bzero(args, sizeof args);
  180.       args[0] = 0xae;
  181. !     args[1] = left;
  182. !     args[3] = right;
  183.       mitsumi_cmd(cdinfo->fd, args, 5, (char *)buf, 5);
  184.       if (buf[0] & 1)
  185.           fprintf(stderr, "error setting volume: %x\n", buf[0] & 0xff);
  186. diff -c -r /cdrom/usr/src/lib/libcdrom/panasonic.c ./panasonic.c
  187. *** /cdrom/usr/src/lib/libcdrom/panasonic.c    Mon Mar  8 11:42:10 1993
  188. --- ./panasonic.c    Fri Jun 25 02:24:55 1993
  189. ***************
  190. *** 218,220 ****
  191. --- 218,228 ----
  192.   {
  193.       return (0);
  194.   }
  195. + int
  196. + panasonic_volume2(cdinfo, left, right)
  197. + struct cdinfo *cdinfo;
  198. + int left, right;
  199. + {
  200. +     return (0);
  201. + }
  202. diff -c -r /cdrom/usr/src/lib/libcdrom/scsi2.c ./scsi2.c
  203. *** /cdrom/usr/src/lib/libcdrom/scsi2.c    Mon Mar  8 11:42:11 1993
  204. --- ./scsi2.c    Fri Jun 25 02:26:24 1993
  205. ***************
  206. *** 233,240 ****
  207.       struct cdinfo *cdinfo;
  208.       int volume;
  209.   {
  210. -     char cdb[10];
  211. -     char buf[100];
  212.       int val;
  213.   
  214.       val = (volume * 255) / 100;
  215. --- 233,238 ----
  216. ***************
  217. *** 243,252 ****
  218.       if (val > 255)
  219.           val = 255;
  220.   
  221.       /* mode select */
  222.       bzero(cdb, 6);
  223.       cdb[0] = 0x15;
  224. !     cdb[1] = 0x10;
  225.       cdb[4] = 20;
  226.   
  227.       bzero(buf, sizeof buf);
  228. --- 241,260 ----
  229.       if (val > 255)
  230.           val = 255;
  231.   
  232. +     return scsi2_volume2(cdinfo, val, val);
  233. + }
  234. + /* each side is [0 .. 255] */
  235. + int
  236. + scsi2_volume2(struct cdinfo *cdinfo, int left, int right)
  237. + {
  238. +     char cdb[10];
  239. +     char buf[100];
  240.       /* mode select */
  241.       bzero(cdb, 6);
  242.       cdb[0] = 0x15;
  243. !     cdb[1] = 0x10;            /* SCSI-2 format */
  244.       cdb[4] = 20;
  245.   
  246.       bzero(buf, sizeof buf);
  247. ***************
  248. *** 257,271 ****
  249.   
  250.       buf[4] = 0xe; /* page code */
  251.       buf[5] = 14;
  252. !     buf[6] = 4;
  253. !     buf[12] = 1;
  254. !     buf[13] = val;
  255. !     buf[14] = 2;
  256. !     buf[15] = val;
  257. !     if (scsi_cmd_write(cdinfo->fd, cdb, buf, 18) < 0) {
  258. !         perror("scsi command: mode select");
  259. !         return (-1);
  260.       }
  261.   
  262.       return (0);
  263. --- 265,279 ----
  264.   
  265.       buf[4] = 0xe; /* page code */
  266.       buf[5] = 14;
  267. !     buf[6] = 4;            /* immed */
  268. !     buf[12] = 1;            /* port 0 to channel 0 */
  269. !     buf[13] = left;
  270. !     buf[14] = 2;            /* port 1 to channel 1 */
  271. !     buf[15] = right;
  272. !     if (scsi_cmd_write(cdinfo->fd, cdb, buf, 20) < 0) {
  273. !         perror("scsi command: mode select (volume):");
  274. !         return (-1);
  275.       }
  276.   
  277.       return (0);
  278. diff -c -r /cdrom/usr/src/lib/libcdrom/toshiba.c ./toshiba.c
  279. *** /cdrom/usr/src/lib/libcdrom/toshiba.c    Mon Mar  8 11:42:12 1993
  280. --- ./toshiba.c    Fri Jun 25 02:25:25 1993
  281. ***************
  282. *** 272,274 ****
  283. --- 272,283 ----
  284.       /* Not supported by drive */
  285.       return (0);
  286.   }
  287. + int
  288. + toshiba_volume2(cdinfo, left, right)
  289. + struct cdinfo *cdinfo;
  290. + int left, right;
  291. + {
  292. +     /* Not supported by drive */
  293. +     return (0);
  294. + }
  295.  
  296.